#include "mtfAlt"

mxfAlt::mxfAlt() {
	uchar i = 0;
	do {
		propiedades[i] = {0, 0};
	} while(++i);
}

void mxfAlt::updateEntry(uchar in) {
	uchar i = 0;
	do {
		propiedades[i].edad++;
	} while(++i);
	propiedades[in] = {0, propiedades[in].frecuencia + 1};
}

uchar mtfAlt::operator() (uchar in) {
// Búsqueda de posición
	register uchar ret = 0;
	while(dict[ret] != in) ret++;
// Shift right
	for(register uchar i = ret; i; i--) {
		dict[i] = dict[i - 1];
	}
// Frente
//	Acá va la modificación de Hugo: dict[(prop(in)>=prop(*dict))?0:1]=in;
	*dict = in;
// DESPUÉS de modificar (o no) el frente, actualizamos propiedades
	updateEntry(in);
// Retornamos posición
	return ret;
}

uchar mffAlt::operator() (uchar in) {
// Búsqueda de caracter
	register uchar ret = dict[in];
// Shift right
	for(register uchar i = in; i; i--) {
		dict[i] = dict[i - 1];
	}
// Frente
//	Acá va la modificación de Hugo: dict[(prop(ret)>=prop(*dict))?0:1]=in;
	*dict = ret;
// DESPUÉS de modificar (o no) el frente, actualizamos propiedades
	updateEntry(ret);
// Retornamos caracter
	return ret;
}

